package com.example.reactor;

import reactor.core.publisher.Flux;

public class Practice14 {

    public static void main(String[] args) {

        Flux.just("1", "2", "3")
                // concatWith() 可以连接一个新的流
                .concatWith(Flux.error(new Exception("手动模拟异常...")))
                .doOnError(Throwable::printStackTrace)
                .onErrorReturn("产生异常，返回 500...")
                .subscribe(System.out::println);

        System.out.println("---------------------------------------分割线-------------------------------------");

        Flux.just("1", "2", "3")
                // concatWith() 可以连接一个新的流
                .concatWith(Flux.error(new Exception("手动模拟异常...")))
                .subscribe(System.out::println,
                        System.err::println,
                        () -> System.out.println("完成..."));

        System.out.println("---------------------------------------分割线-------------------------------------");

        Flux.just("1", "2", "3")
                // concatWith() 可以连接一个新的流
                .concatWith(Flux.error(new Exception("手动模拟异常...")))
                .onErrorResume(throwable -> {
                    System.out.println(throwable.getMessage());
                    return Flux.just("1", "1", "1");
                })
                .subscribe(System.out::println);

        System.out.println("---------------------------------------分割线-------------------------------------");

        Flux.just("1", "2", "3")
                // concatWith() 可以连接一个新的流
                .concatWith(Flux.error(new Exception("手动模拟异常...")))
                .retry(1)
                .subscribe(System.out::println);


    }

}
